import { defineStore } from 'pinia'

// useStore 可以是 useUser、useCart 之类的任何东西
// 第一个参数是应用程序中 store 的唯一 id

interface stateType{
  counter: number
  name: string
  isAdmin: boolean
  hasRoute: []
  users:{id:number}[]
}

export const useStore = defineStore('main', {
  state: ():stateType => {
    return {
      // 所有这些属性都将自动推断其类型
      counter: 1,
      name: 'Eduardo',
      isAdmin: true,
      hasRoute:[],
      users:[{
        id:999
      },{
        id:2
      }]
    }
  },
  //Getters 只是幕后的 computed 属性
  getters: {
    //获取state的值两种方式(箭头函数与普通函数的区别)
    // double: (state):number => state.counter * 2,
    double(): number {//对象里面直接放函数？？
      return this.counter * 2
    },
    //访问其他getter(通过this)
    doubleDouble():number {
      //这种断言写法不一定对
      return (this.double as unknown as number) * 2
      // return (<number><unknown>this.double) * 2
    },
    // 无法传递任何参数，可以从getter返回一个函数以接受任何参数
    getUserById: (state) => {
      return (userId:number) => state.users.find((user) => user.id === userId)
    },
  },
  actions: {
    increment() {
      this.counter++
    },
  }
})